//package com.csw.shuanfa.poi;
//
//import io.micrometer.core.instrument.util.StringUtils;
//import org.apache.poi.hssf.usermodel.HSSFCellStyle;
//import org.apache.poi.xssf.usermodel.XSSFCellStyle;
//import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
//import org.apache.poi.xssf.usermodel.XSSFDrawing;
//import org.apache.poi.xssf.usermodel.XSSFRow;
//import org.apache.poi.xssf.usermodel.XSSFSheet;
//import org.apache.poi.xssf.usermodel.XSSFWorkbook;
//
//import javax.imageio.ImageIO;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.awt.image.BufferedImage;
//import java.io.ByteArrayOutputStream;
//import java.io.File;
//import java.io.IOException;
//import java.io.OutputStream;
//
//public class PoiTest2 {
//    public static void main(String[] args) {
//
//    }
//    /**
//     导出数据到
//     ，可携带图⽚，图⽚格式为常见的
//     和
//     格式
//     * Description:
//     excel
//     jpg
//     png
//     * @Author: Bernie_fang
//     * @Since: 2022/3/23 14:43
//    数据
//     * @param list:
//    list
//     * @param request:
//     * @param response:
//     * @return: void
//     **/
//    publicvoidexportExcelDataWithPhoto(List<xxx> list, HttpServletRequest request, HttpServletResponse response)throws IOException {
//        //拿到项⽬在服务器上的绝对路径
//        String realPath = request.getSession().getServletContext().getRealPath("/");//
//        XSSFWorkbook workbook =new XSSFWorkbook();
//        XSSFSheet sheet = workbook.createSheet();
//        //创建单元格从
//       // 开始
//        XSSFRow head= sheet.createRow(0);
//
//        //0
//        //第⼀列标头
//        head.createCell(0).setCellValue("姓名");//
//       // 第⼆列标头
//        head.createCell(1).setCellValue("性别");//
//        head.createCell(2).setCellValue("");// ...
//        head.createCell(3).setCellValue("图⽚");
//       // 样式对象
//        XSSFCellStyle style = workbook.createCellStyle();//
//        //垂直
//        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//
//        //⽔平
//        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//
//        下边框类型
//        style.setBorderBottom(HSSFCellStyle.BORDER_THIN);//
//        左边框类型
//        style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//
//        右边框类型
//        style.setBorderRight(HSSFCellStyle.BORDER_THIN);//
//        上边框类型
//        style.setBorderTop(HSSFCellStyle.BORDER_THIN);//
//        //新增数据⾏，并且设置单元格数据
//        int rowNum =1;
//       // 判空
//        if(list==null|| list.size()<=0){
//            XSSFRow row1 = sheet.createRow(rowNum);
//            row1.createCell(0).setCellValue("暂⽆记录");
//// CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol);
//            //合并，参数看⼀下源码就明⽩
//            sheet.addMergedRegion(new CellRangeAddress(1,1,0,10));//
//            row1.getCell(0).setCellStyle(style);
//            return;
//        }
//        //在表中存放查询到的数据放⼊对应的列
//        for(XXX xxx: list){
//            XSSFRow row = sheet.createRow(rowNum);
//            //设置⾏⾼
//            //设置⾏⾼
//            row.setHeight((short)1500);//
//            //第⼀列的数据
//            row.createCell(0).setCellValue(xxx.getYYY());//
//            //第⼆列的数据
//            row.createCell(1).setCellValue(xxx.getYYY());//
//            //第⼆列的数据
//            row.createCell(1).setCellValue(xxx.getYYY());//
//            row.createCell(2).setCellValue(xxx.getYYY());// ...
//            //图⽚处理
//            /*
//             */
//            if(StringUtils.isEmpty(xxx.getScreenshot())){
//                //获取图⽚的存储路径
//                //图⽚写在第列
//                row1.createCell(3).setCellValue("暂⽆图⽚");//
//                //4
//                rowNum++;
//                continue;
//            }
//            //图⽚路径
//            String path = xxx.getScreenshot();//
//            //拼接拿到绝对路径
//            File file =new File(realPath + path);//
//            //路径：
////            //
////===========================" + realPath + path);
//            if(file.exists()){
//                XSSFDrawing patriarch = sheet.createDrawingPatriarch();
//                BufferedImage bufferImg =null;
//                ByteArrayOutputStream byteArrayOut =new ByteArrayOutputStream();
//                bufferImg = ImageIO.read(file);
//                //获取图⽚类型，后缀名
//                String type = path.substring(path.length()-3);//
//                ImageIO.write(bufferImg, type, byteArrayOut);
//                //主要⽤于设置图⽚的属性
//                // anchor
//                //前⾯
//                //个参数是内的
//                //轴偏移，不懂看源码或者百度，很多；后⾯
//                //个参数是
//                       // 的坐标
////4
//                cell
//                        xy
//                4
//                cell
//                XSSFClientAnchor anchor =new XSSFClientAnchor(0,0,0,0,(short)3, rowNum,(short)4, rowNum +1);
//                //写死就好了，不需要呀改动
//                anchor.setAnchorType(3);//
//                //插⼊图⽚
//                patriarch.createPicture(anchor, workbook.addPicture(byteArrayOut.toByteArray(),"jpg".equals(type)? XSSFWorkbook.PICTURE_TYPE_JPEG :
//                        XSSFWorkbook.PICTURE_TYPE_PNG));
//            }else{
//                //图⽚不存在
//                row.createCell(4).setCellValue("暂⽆图⽚");//
//            }
//            rowNum++;
//        }
//
//        //设置⽣成的
//       // 的⽂件名，并以中⽂进⾏编码
//        response.reset();
//        //设置要导出的⽂件的名字
//        String fileName ="xxx名单";
//        String codedFileName =new String(fileName.getBytes("gbk"),"iso-8859-1");
//        response.setHeader("Content-Disposition","attachment;filename="+ codedFileName +".xlsx");
//        //响应类型
//                //编码
//        response.setContentType("application/octet-stream;charset=UTF-8");
//        //形成输出流
//        OutputStream osOut =null;
//        try{
//            osOut = response.getOutputStream();
//            //将指定的字节写⼊此输出流
//            workbook.write(osOut);
//        }catch(IOException e){
//            e.printStackTrace();
//        }finally{
//            //刷新此输出流并强制将所有缓冲的输出字节被写出
//            try{
//                osOut.flush();
//            }catch(IOException e){
//                e.printStackTrace();
//            }
//            //关闭流
//            if(osOut !=null){
//                try{
//                    osOut.close();
//                }catch(IOException e){
//                    e.printStackTrace();
//                }
//            }
//        }
//    }
//}
//}
